package com.briup.estore.common.utils;

import com.briup.estore.common.constant.OrderConstant;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;

/**
 * @Author briup-adam
 * @Date 2023/7/31 下午2:39
 * @Description 唯一订单号生成工具类
 **/

public class MakeIDUtils {
    /**
     * 锁对象，可以为任意对象
     */
    private static Object lockObj = "lock";
    /**
     * 订单号生成计数器
     */
    public static long orderNumCount = 0L;
    /**
     * 每毫秒生成订单号数量最大值
     */
    public static int maxPerMSECSize = 9999;


    /**
     * 生成非重复订单号，理论上限1毫秒1000个，可扩展
     * 订单号组成
     * 平台标识+时间+序列号
     */
    public static String generateOrderID() {
        String  timeStr = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String serialNo = "";
        try {
            // 最终生成的订单号
            synchronized (lockObj) {
                // 计数器到最大值归零，可扩展更大，目前1毫秒处理峰值1000个，1秒100万
                if (orderNumCount++ > maxPerMSECSize) {
                    orderNumCount = 0L;
                }
                serialNo=String.valueOf(orderNumCount);
               for (int i=4;i-serialNo.length()>0;){
                   serialNo="0"+serialNo;
               }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return OrderConstant.ORDER_ID_PREFIX+timeStr+serialNo;
    }
}
